package com.wb.core08_常用类.String;

/**
 * @author 黄衡熙
 * @version 1.0
 */
public class Test01_定义方式 {
    public static void main(String[] args){
        //方法一直接创建字符串，该方法不符合引用数据类型的特性，不符合面向对象的规范
        //原则上来说引用数据类型都是通过new关键字来实现的
        //由于String使用的频率太高，jvm做了特殊处理
        //String是一个特殊的引用数据类型，可以直接赋值
        //直接赋值进行比较式，值比较值，不比较地址
        //直接赋值没有在堆中存储开辟空间，而是在常量池中
        String s1="hello";
        String s2="hello";
        System.out.println(s1 == s2);//true


        //方法二通过构造方法进行创建
        //创建一个空字符串，在堆中分配了空间，空间没有值
        String s3=new String();
        String s4="";//字节赋值，没有在堆中创建空间
        System.out.println(s3 == s4);//false
        System.out.println(s3.equals(s4));//true

        String s5=null;
        String s6=new String("hello");
        System.out.println(s1 == s6);//false
        System.out.println(s1.equals(s6));//true

        //字符串的拼接
        // 字符串可以与任意类型进行拼接
        System.out.println(s1 + "world");
        System.out.println(s2 + true);
        System.out.println(s3 + 123);


    }
}
